Сценарии и проблемы
Редактировал(а) Alexandr Fokin 2025/06/06 16:55
Создание нескольких IServiceProvider. Singleton. |
|
Валидация при сборке Di контейнера. | services.BuildServiceProvider( new ServiceProviderOptions() { ValidateOnBuild = true, ValidateScopes = true } ); |
Перегрузка логики GetServices | service.AddScoped<IEnumerable<string>> |
Регистрация одного типа (экземпляра) для нескольких абстракций. | services.AddScoped<TImplementation>(); services.AddScoped<TInterface1>(s => s.GetRequiredService<TImplementation>()); services.AddScoped<TInterface2>(s => s.GetRequiredService<TImplementation>()); В случае, если регистрировать через указание интерфейса и типа реализации, то будет создано несколько экземпляров TImplementation, а не один. |
Resolve factory | Выбор реализации типа в рантайме (например через использование из AsyncLocal переменной). Возможное решение: переписывание IServiceCollection, перемещая обычную регистрацию в ключевую, а вместо нее помещая фабричный метод, который содержит логику выбора реализации в зависимости от условий. |